const path = require('path')
// 启动热更新的第二步
const webpack = require('webpack')
// 导入在内存中生成的 HTML 页面的插件
const htmlWebpackPlugin = require('html-webpack-plugin')
// webpack 4 解析 .vue 文件需要插件
const VueLoaderPlugin = require('vue-loader/lib/plugin')

module.exports = {
    entry: path.join(__dirname, './src/main.js'),
    output: {
      path: path.join(__dirname, './dist'),
        filename: 'bundle.js'
  },
    devServer: {
        open: true, // 自动打开浏览器
        port: 3000, // 设置启动时候的运行端口
        contentBase: 'src', // 指定托管的根目录
        hot: true  //启用热更新的第一步
    },
    module: { // 用于配置 所有的第三方模块 加载器
        rules: [ // 匹配规则
            { test: /\.css$/, use: ['style-loader', 'css-loader'] },
            { test: /\.less$/, use: ['style-loader', 'css-loader', 'less-loader'] },
            { test: /\.scss$/, use: ['style-loader', 'css-loader', 'sass-loader'] },
            { test: /\.(jpg|png|gif|bmp|jpeg)$/, use: 'url-loader?limit=5000&[hash:8]-name=[name].[ext]' },
            { test: /\.js$/, use: 'babel-loader', exclude: /node_modules/ }, // 解决 ES6 语法
            { test: /\.(ttf|eot|svg|woff|woff2)$/, use: 'url-loader' },
            { test: /\.vue$/, use: 'vue-loader' }
        ]    
    },
    plugins: [
        new VueLoaderPlugin(),
        // new 一个热更新的 模块对象，这是启动热更新的第三步
        new webpack.HotModuleReplacementPlugin({
            // 模板路径
            template: path.resolve(__dirname, 'src/index.html'),
            // 自动生成的HTML文件的名称
            filename: 'index.html'
        }),
        new htmlWebpackPlugin({
            template: path.join(__dirname, './src/index.html'),
            filename: 'index.html'
        })
    ],
    resolve: {
        alias: {
            // 修改 vue 被导入时的路径
            "vue$": "vue/dist/vue.js"
        }
    }
}
